import java.util.Arrays;

public class Solution {
    public static int numDecodings(String s) {
        int len = s.length();
        int[] ret = new int[len];

        if (s.charAt(0) == '0') {
            return 0;
        } else {
            ret[0] = 1;
        }

        if (len == 1) {
            return ret[0];
        }

        if (s.charAt(1) != '0' && s.charAt(0) != '0') {
            ret[1] += 1;
        }
        if (Integer.parseInt(s.substring(0, 2)) >= 10 && Integer.parseInt(s.substring(0, 2)) <= 26) {
            ret[1] += 1;
        }

        for (int i = 2; i < len; i++) {
            //单独
            if (s.charAt(i) >= '1' && s.charAt(i) <= '9') {
                ret[i] += ret[i - 1];
            }

            //与前一个
            int parseInt = Integer.parseInt(s.substring(i - 1, i + 1));
            System.out.println(parseInt);
            if (parseInt >= 10 && parseInt <= 26) {
                ret[i] += ret[i - 2];
            }
        }
        System.out.println(Arrays.toString(ret));
        return ret[len - 1];
    }

    public static void main(String[] args) {
        System.out.println(numDecodings("012"));
    }

    //添加了虚拟节点
    public int numDecodings2(String s) {
        int len = s.length();
        int[] ret = new int[len + 1];//第一个为虚拟结点

        //初始化第一个虚拟节点
        ret[0] = 1;

        //处理第一个字符
        if (s.charAt(1 - 1) != '0') {
            ret[1] = 1;
        }

        if (len == 1) {
            return ret[0];
        }


        for (int i = 2; i < len + 1; i++) {
            //单独判断
            if (s.charAt(i - 1) >= '1' && s.charAt(i - 1) <= '9') {
                ret[i] += ret[i - 1];
            }

            //与前一个结合在一起判断
            int parseInt = Integer.parseInt(s.substring(i - 1 - 1, i));
            // System.out.println(parseInt);
            if (parseInt >= 10 && parseInt <= 26) {
                ret[i] += ret[i - 2];
            }
        }
        // System.out.println(Arrays.toString(ret));
        return ret[len];
    }
}
